/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.Setor;
import util.ControlaConexao;

/**
 *
 * @author Gilmara Maquine
 */
public class SetorDAO {
    
    private Connection conexao;
    private PreparedStatement instrucao;
    private ResultSet resultado;

    private void fechaInstrucao() {
        try {
            this.instrucao.close();
        } catch (Exception e) {
            System.out.println("Erro ao fechar instrucao!" + e.getMessage());
        }
    }

    private void fechaConexao() {
        try {
            this.conexao.close();
        } catch (Exception e) {
            System.out.println("Erro ao fechar conexao!" + e.getMessage());
        }
    }

    private void fechaResultado() {
        try {
            this.resultado.close();
        } catch (Exception e) {
            System.out.println("Erro ao fechar o resultado!" + e.getMessage());
        }
    }
    
 public void inserir(Setor setor){
        try{
            this.conexao = ControlaConexao.getConexao();
            String sql = "CALL INSERIR_SETOR(?)";
            this.instrucao = conexao.prepareStatement(sql);
            this.instrucao.setString(1,setor.getNome());
            instrucao.execute();
            System.out.println("Conectado com sucesso!");
        }catch(SQLException e){
            throw new RuntimeException(e);
        }finally{
            fechaInstrucao();
            fechaConexao();
        }
    }
    
    public void alterar(Setor setor){
        try{
            this.conexao = ControlaConexao.getConexao();
            String sql = "CALL ALTERAR_SETOR (?)";
            this.instrucao = conexao.prepareStatement(sql);
            this.instrucao.setString(1,setor.getNome());
            this.instrucao.setLong(2,setor.getId());
            instrucao.execute();
            System.out.println("Conectado com sucesso");
        }catch(SQLException e){
            System.out.println("Erro: "+e.getMessage());
        }finally{
            fechaInstrucao();
            fechaConexao();
        }
        
    }

    public void excluir(Setor setor){
        try{
            this.conexao = new ControlaConexao().getConexao();
            String sql = "CALL EXCLUIR_SETOR (?)";
            this.instrucao = conexao.prepareStatement(sql);
            this.instrucao.setLong(1,setor.getId());
            instrucao.execute();
            System.out.println("Conectado com sucesso!");
        }catch(SQLException e){
            System.out.println("Erro: "+e.getMessage());
        }finally{
            fechaInstrucao();
            fechaConexao();
        }
    }
    public Setor consultar(Setor setor){
        Setor setorEncontrado = null;
        try{
            this.conexao = new ControlaConexao().getConexao();
            System.out.println("CONECTADO!");
            String sql = "CALL CONSULTAR_SETOR (?)";
            this.instrucao = conexao.prepareStatement(sql);
            instrucao.setLong(1,setor.getId());
            resultado = instrucao.executeQuery();
                while (resultado.next()) {
                    setorEncontrado = new Setor();
                    setorEncontrado.setId(Long.parseLong(resultado.getString("set_id")));
                    setorEncontrado.setNome(resultado.getString("set_nome"));
                   

                }
        }   
            catch(SQLException e){
                System.out.println("Erro: "+e.getMessage());
            }finally{
                fechaResultado();
                fechaInstrucao();
                fechaConexao();
            }
       return setorEncontrado;
        }
    
    public List<Setor> pesquisar(Setor setor){
        Setor setorEncontrado = null;
        List<Setor> listasetores = new ArrayList<Setor>();
        try {
            this.conexao = new ControlaConexao().getConexao();
            System.out.println("Conectado!");
            String sql = "CALL PESQUISAR_SETOR (?)";
            this.instrucao = conexao.prepareStatement(sql);
            instrucao.setString(1, "%" + setor.getNome() + "%");
            resultado = instrucao.executeQuery();
            while (resultado.next()) {
                setorEncontrado = new Setor();
                setorEncontrado.setId(Integer.parseInt(resultado.getString("set_id")));
                setorEncontrado.setNome(resultado.getString("set_nome"));
                
                listasetores.add(setorEncontrado);

            }
          }catch(SQLException e){
                System.out.println("Erro: "+e.getMessage());
            }finally{
                fechaResultado();
                fechaInstrucao();
                fechaConexao();
        }
        return listasetores;
    }
    
}
